#ifndef __NIEIK_SDLS_H__
#define __NIEIK_SDLS_H__

namespace nieIK
{

static const Float lambda = 1.2f;
static const Float gamma_max = 0.78539816339744828f; // PI/4

void iksolver_sdls(Skeleton *skel, const std::vector<Vector3> &target_pos, int max_itera = 50, Float epsilon = 0.01f);
void iksolver_dls(Skeleton *skel, const std::vector<Vector3> &target_pos, int max_itera = 5000, Float epsilon = 0.01f);
void iksolver_jacobian_transpose(Skeleton *chain, const Vector3 &target_pos, int max_itera = 1, Float epsilon = 0.01f);
void iksolver_jacobian_transpose_constraint(Skeleton *chain, const Vector3 &target_pos, int max_itera = 1, Float epsilon = 0.01f);
void iksolver_ccd(Skeleton *chain, const Vector3 &target_pos, int max_itera = 10, Float epsilon = 0.01f);

} // namespace nieIK

#endif // __NIEIK_SDLS_H__